package algoritmos;

import java.util.ArrayList;

public class Otimo extends Algoritmo {

	public Otimo(ArrayList<Integer> requisicao, int MAX_FRAME) {
		super(requisicao, MAX_FRAME);
	}

	protected void acerto(int acerto) {
	}

	protected void substitui(int novo, int indiceAtualDaRequisicao) {
		if (frame.size() == MAX_FRAME) {
			int valor = lastItemThatWillBeUsed(indiceAtualDaRequisicao);
			frame.remove((Integer) valor);
		}
		frame.add(novo);
	}

	private int lastItemThatWillBeUsed(int indiceAtualDaRequisicao) {
		Integer valorNaRequisicao;
		int indexOf = -1;
		int maiorIndexOf = -1;

		for (int valorNoFrame : frame) {
			indexOf = -1;
			for (int i = indiceAtualDaRequisicao; i < requisicao.size(); i++) {
				valorNaRequisicao = requisicao.get(i);
				if (valorNoFrame == valorNaRequisicao) {
					indexOf = i;
				}
			}
			if (indexOf == -1) {
				return valorNoFrame;
			} else {
				if (indexOf > maiorIndexOf) {
					maiorIndexOf = indexOf;
				}
			}
		}
		return requisicao.get(maiorIndexOf);
	}
}
